import java.util.ArrayList;
import java.util.List;

public class Solution1 {
    public int countSegments(String s) {
        if (s == null) {
            return 0;
        }
        if (s.isEmpty()) {
            return 0;
        }
        s = s.trim();

        String[] str = s.split(" ");
        int count = 0;
        for (int i = 0; i < str.length; i++) {
            if (!str[i].isEmpty()) {
                count++;
            }
        }
        return count;
    }

    public String toLowerCase(String s) {
        if (s == null || s.isEmpty()) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch >= 'A' && ch <= 'Z') {
                sb.append((char)(ch + 32));
            }else {
                sb.append(ch);
            }
        }
        return sb.toString();
    }

    public void rotate(int[] nums, int k) {
        if (nums == null || nums.length == 0 || k < 0) {
            return;

        }
        int n = nums.length;
        k %= n;
        // k 是有可能 大于 数组的长度的
        // 所以要取模 让其范围在0到n之间
        // 因为向右旋转n+1个位置 其实也就是轮了一轮
        // 等同于向右移了一个位置
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n- 1);
    }

    public void reverse(int[] array, int i, int j) {
        while(i < j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            i++;
            j--;
        }
    }

    public int removeElement(int[] nums, int val) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int j = 0;
        for (int i = 0; i < nums.length; i++) {

            if (nums[i] != val) {
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }

    public int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int j = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[i-1]) {
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        if (nums1 == null || nums2 == null) {
            return;
        }
        if (m < 0 || n < 0) {
            return;
        }
        int end1 = m-1;
        int end2 = n-1;
        int end = m + n -1;
        while (end1 >= 0 && end2 >= 0) {
            if (nums1[end1] < nums2[end2]) {
                nums1[end--] = nums2[end2--];
            }else {
                nums1[end--] = nums1[end1--];
            }
        }
        while(end1 >= 0) {
            nums1[end--] = nums1[end1--];
        }
        while(end2 >= 0) {
            nums1[end--] = nums2[end2--];
        }
        return;
    }
    public List<List<Integer>> generate(int numRows) {
        if (numRows <= 0) {
            return null;
        }
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        ret.add(list);
        for(int i = 1; i < numRows; i++) {
            List<Integer> curRow = new ArrayList<>();
            //添加开头的
            curRow.add(1);
            // 添加中间的
            for(int j = 1; j < i; j++) {
                List<Integer> preRow = ret.get(i-1);
                int val = preRow.get(j) + preRow.get(j-1);
                curRow.add(val);
            }
            //添加末尾的
            curRow.add(1);
            ret.add(curRow);
        }
        return ret;

    }

}
